<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// 原型链

Object.prototype.hehe = '呵呵';// 在原型对象上添加hehe属性

var num = 123;
var str = 'hello';
var arr = [1,2,3];
var obj = {a:123};

console.log( num.haha );// undefined
console.log( num.hehe );// '呵呵'
console.log( str.hehe );// '呵呵'
console.log( arr.hehe );// '呵呵'
console.log( obj.hehe );// '呵呵'

// num.hehe如何访问到hehe属性?
// JS中对象查找属性的过程: 先在对象自身查找,如果没有,则向上层原型对象查找,一直查找到null
// 在num自身查找hehe,没有,然后查找num.__proto__-->Number.prototype,没有,然后继续查找原型对象的原型num.__proto__.__proto__-->Object.prototype找到hehe属性,返回属性值

// num.haha如何查找haha属性?
// JS中对象查找属性的过程: 先在对象自身查找,如果没有,则向上层原型对象查找,一直查找到null
// 在num自身查找haha,没有,然后查找num.__proto__-->Number.prototype,没有,然后继续查找原型对象的原型num.__proto__.__proto__-->Object.prototype,没有,然后继续查找原型对象的原型num.__proto__.__proto__.__proto__-->null,返回undefined

</script>
</body>
</html>